package hadoop;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.io.IOUtils;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;

public class HadoopUtil {
//    连接
    String url = "hdfs://192.168.43.11:9000/";
//    上传
    public String hadoopUpload(String srcPath , String destPath ) throws IOException{

        String url_new = url;
        Configuration conf = new Configuration();
        FileSystem fileSystem = FileSystem.get(URI.create(url_new),conf);

//        本地的文件
        Path srcLoc = new Path(srcPath);
//        hdfs 的路径
        Path destLoc  = new Path(destPath);
//        使用 hadoop 和 copyFromLocalFile
        fileSystem.copyFromLocalFile(srcLoc,destLoc);
        return "上传成功";

    }
//    读文件
    public List<String> hadoopRead(String filePath) throws IOException {
//        用 api 的形式 ， 读取下我们刚才的文件
        String readUrl = url + filePath ;
//        加载 hdfs 的配置
        Configuration conf  = new Configuration();
//        建立 hdfs 连接
        FileSystem fileSystem = FileSystem.get(URI.create(readUrl),conf);
//        打开url路径的文件
        FSDataInputStream fsDataInputStream = fileSystem.open(new Path(readUrl));
//        输出 文件内容 ， 并关闭输入流

        BufferedReader br = new BufferedReader(new InputStreamReader(fsDataInputStream, "utf-8"));

        List<String> list = new ArrayList<>();
        String line = null;
        while((line=br.readLine()) != null) {


            System.out.println("数据内容 ");
            System.out.println(line);

            list.add(line);
        }
        return list;

    }
//    下载
    public String hadoopDownload(String srcPath , String destPath) throws IOException {
//      用 api 的形式 读取下刚才写的文件
        String url_new = url;
        Configuration conf  = new Configuration();
        FileSystem fileSystem = FileSystem.get(URI.create(url_new),conf);
//        建立hdfs连接
//        本地的文件
        Path srcLoc = new Path(srcPath);
//        hdfs 的路径
        Path destLoc = new Path(destPath);
        fileSystem.copyFromLocalFile(srcLoc,destLoc);

        return "下载成功！";

    }


}
